package com.afdor.rws.event.channel.client.consumer;

import com.afdor.rws.event.Serialization;
import com.afdor.rws.event.channel.client.consumer.handler.EventHandler;
import com.afdor.rws.event.channel.client.consumer.handler.EventRetryStrategy;
import lombok.NonNull;

/**
 * 事件消费者
 *
 * @author 悭梵
 * @date Created in 2018-08-07 15:07
 */
public interface EventConsumer {
    /**
     * 获取消费者消费事件源队列名称
     *
     * @return
     */
    String getEventSourceName();

    /**
     * 设置消费者消费事件源队列名称
     *
     * @param eventSourceName
     * @return
     */
    EventConsumer setEventSourceName(String eventSourceName);

    /**
     * 获取事件处理的具体实现
     *
     * @return
     */
    @NonNull
    EventHandler getEventHandler();

    /**
     * 设置事件处理的具体实现对象
     *
     * @return
     */
    EventConsumer setEventHandler(@NonNull EventHandler eventHandler);

    /**
     * 获取事件消费失败重试策略
     *
     * @return
     */
    EventRetryStrategy getEventRetryStrategy();

    /**
     * 设置事件消费失败重试策略
     *
     * @return
     */
    EventConsumer setEventRetryStrategy(@NonNull EventRetryStrategy eventRetryStrategy);

    /**
     * 返回序列化器-用于事件传输
     *
     * @return
     */
    Serialization getSerialization();

    /**
     * 设置序列化器-用于事件传输
     *
     * @param serialization
     * @return
     */
    EventConsumer setSerialization(Serialization serialization);

    /**
     * 初始化
     *
     * @return
     */
    EventConsumer init();

    /**
     * 启动事件消费者，执行消费事件
     */
    void start();

    /**
     * 停止事件消费
     */
    void stop();

}
